package com.example.apidocserver.domain.user.service;

import com.example.apidocserver.domain.user.entity.UsrUserAuths;
import com.example.apidocserver.domain.user.entity.UsrUsers;
import com.example.apidocserver.infrastructure.config.security.UserDetailsImpl;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.List;

/**
 * (UsrUsers)表服务接口
 *
 * @author makejava
 * @since 2023-04-26 22:20:16
 */
public interface UsrUsersService {

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    UsrUsers queryById(Long userId);

    /**
     * 查询所有对象
     *
     * @return 查询结果
     */
    List<UsrUsers> queryAll();

    /**
     * 根据对象查询
     *
     * @param usrUsers 筛选条件
     * @return 查询结果
     */
    List<UsrUsers> queryByEntity(UsrUsers usrUsers);

    /**
     * 新增数据
     *
     * @param usrUsers 实例对象
     * @return 实例对象
     */
    UsrUsers insert(UsrUsers usrUsers);

    /**
     * 修改数据
     *
     * @param usrUsers 实例对象
     * @return 实例对象
     */
    UsrUsers update(UsrUsers usrUsers);

    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 是否成功
     */
    boolean deleteById(Long userId);

    /**
     * 工具用户名称查询用户信息
     *
     * @param username     用户名
     * @param identityType 登录类型
     * @return 用户校验对象
     */
    UserDetails queryUserDeTailsByUsernameAndType(String username, Integer identityType);

    /**
     * 获取认证对象
     *
     * @param auth 认证对象
     * @param user 用户
     * @return 认证对象
     */
    UserDetailsImpl getUserDetails(UsrUserAuths auth, UsrUsers user);
}
